home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
ole2book.zip
/
CHAP09.ZIP
/
CHAP09
/
PATRON
/
TENANT.H
< prev
Wrap
C/C++ Source or Header
|
1993-06-23
|
7KB
|
215 lines
/*
* TENANT.H
* Reorganization for Chapter 9.
*
* Definitions and function prototypes for the CTenant class
*
* Copyright (c)1993 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Software Design Engineer
* Microsoft Systems Developer Relations
*
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/
#ifndef _TENANT_H_
#define _TENANT_H_
//CHAPTER9MOD
class __far CImpIOleClientSite : public IOleClientSite
{
protected:
ULONG m_cRef; //Interface reference count.
class CTenant FAR * m_pTen; //Back pointer to the object.
LPUNKNOWN m_punkOuter; //Controlling unknown for delegation.
public:
CImpIOleClientSite(class CTenant FAR *, LPUNKNOWN);
~CImpIOleClientSite(void);
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP SaveObject(void);
STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER FAR *);
STDMETHODIMP GetContainer(LPOLECONTAINER FAR *);
STDMETHODIMP ShowObject(void);
STDMETHODIMP OnShowWindow(BOOL);
STDMETHODIMP RequestNewObjectLayout(void);
};
typedef CImpIOleClientSite FAR * LPIMPIOLECLIENTSITE;
class __far CImpIAdviseSink : public IAdviseSink
{
protected:
ULONG m_cRef; //Interface reference count.
class CTenant FAR * m_pTen; //Back pointer to the object.
LPUNKNOWN m_punkOuter; //Controlling unknown for delegation.
public:
CImpIAdviseSink(class CTenant FAR *, LPUNKNOWN);
~CImpIAdviseSink(void);
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP_(void) OnDataChange(LPFORMATETC, LPSTGMEDIUM);
STDMETHODIMP_(void) OnViewChange(DWORD, LONG);
STDMETHODIMP_(void) OnRename(LPMONIKER);
STDMETHODIMP_(void) OnSave(void);
STDMETHODIMP_(void) OnClose(void);
};
typedef CImpIAdviseSink FAR * LPIMPIADVISESINK;
//End CHAPTER9MOD
/*
* Tenant class describing an individual piece of data in a page.
* It knows where it sits, what object is inside of it, and what
* its idenitifer is such that it can find it's storage within a page.
*/
//Patron Objects clipboard format
typedef struct tagPATRONOBJECT
{
POINTL ptl; //Location of object
POINTL ptlPick; //Pick point from drag-drop operation.
SIZEL szl; //Extents of object (absolute)
FORMATETC fe; //Actual object format.
} PATRONOBJECT, FAR * LPPATRONOBJECT;
//Values for hit-testing, drawing, and resize-tracking tenants
#define CXYHANDLE 5
//Tenant types (not persistent, but determined at load time)
typedef enum
{
TENANTTYPE_NULL=0,
TENANTTYPE_STATIC,
//CHAPTER9MOD
TENANTTYPE_EMBEDDEDOBJECT,
TENANTTYPE_EMBEDDEDFILE,
TENANTTYPE_EMBEDDEDOBJECTFROMDATA
//End CHAPTER9MOD
} TENANTTYPE, FAR * LPTENANTTYPE;
//State flags
#define TENANTSTATE_DEFAULT 0x00000000
#define TENANTSTATE_SELECTED 0x00000001
//CHAPTER9MOD
#define TENANTSTATE_OPEN 0x00000002
//End CHAPTER9MOD
class __far CTenant : public IUnknown
{
//CHAPTER9MOD
friend CImpIOleClientSite;
friend CImpIAdviseSink;
//End CHAPTER9MOD
private:
HWND m_hWnd; //Pages window, same as CPages.
DWORD m_dwID; //Persistent DWORD identifier
DWORD m_cOpens; //Count calls to FOpen.
BOOL m_fInitialized; //Something here?
LPUNKNOWN m_pObj; //The object that lives here.
LPSTORAGE m_pIStorage; //Sub-storage for this tenant
FORMATETC m_fe; //As used to create the object.
DWORD m_dwState; //State flags
RECTL m_rcl; //Space of this object.
class CPages FAR *m_pPG; //Pages window
//CHAPTER9MOD
TENANTTYPE m_tType; //Type identifier
ULONG m_cRef; //We're an object now!
LPOLEOBJECT m_pIOleObject; //IOleObject on m_pObj
LPVIEWOBJECT m_pIViewObject; //IViewObject on m_pObj
LPOLECLIENTSITE m_pIOleClientSite; //Our interfaces
LPADVISESINK m_pIAdviseSink;
//End CHAPTER9MOD
protected:
//CHAPTER9MOD
BOOL FObjectInitialize(LPUNKNOWN, LPFORMATETC, DWORD);
//End CHAPTER9MOD
HRESULT CreateStatic(LPDATAOBJECT, LPFORMATETC, LPUNKNOWN FAR *);
public:
CTenant(DWORD, HWND, CPages FAR *);
~CTenant(void);
//CHAPTER9MOD
//Gotta have an IUnknown for delegation.
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//End CHAPTER9MOD
DWORD GetID(void);
UINT GetStorageName(LPSTR);
UINT UCreate(TENANTTYPE, LPVOID, LPFORMATETC, LPPOINTL
, LPSIZEL, LPSTORAGE, LPPATRONOBJECT, DWORD);
BOOL FLoad(LPSTORAGE, LPFORMATETC, LPRECTL);
BOOL FOpen(LPSTORAGE);
void Close(BOOL);
BOOL Update(void);
void Destroy(LPSTORAGE);
void Select(BOOL);
//CHAPTER9MOD
void ShowAsOpen(BOOL);
void ShowYourself(void);
void AddVerbMenu(HMENU, UINT);
void CopyEmbeddedObject(LPDATAOBJECT, LPFORMATETC, LPPOINTL);
void NotifyOfRename(LPSTR, LPVOID);
//End CHAPTER9MOD
BOOL Activate(DWORD);
void Draw(HDC, DVTARGETDEVICE FAR *, HDC, int, int, BOOL, BOOL);
void Repaint(void);
void Invalidate(void);
void ObjectGet(LPUNKNOWN FAR *);
void FormatEtcGet(LPFORMATETC, BOOL);
void SizeGet(LPSIZEL, BOOL);
void SizeSet(LPSIZEL, BOOL);
void RectGet(LPRECTL, BOOL);
void RectSet(LPRECTL, BOOL);
};
typedef CTenant FAR * LPTENANT;
//Return codes for UCreate
#define UCREATE_FAILED 0
#define UCREATE_GRAPHICONLY 1
#define UCREATE_PLACEDOBJECT 2
#endif //_TENANT_H_